/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package td1exo;

/**
 *
 * @author boomar
 */
public interface List<E> {

    /**
     * Ajout d'un element de type E dans la liste.
     * @return vrai si l'insertion a reussi.
     */
    boolean add(E e);

    /**
     * Ajoute un element a la position indiquee dans la liste. Si la 
     * position est superieure a la taille actuelle de la liste,
     * ajoute l'element a la n.
     * Si la position est inferieur a l'indice dupremier element, ajoute
     * l'element au debut.
     */
    void add(int index, E e);

    /**
     * @return vrai si l'element specie fait partie de la liste.
     */
    boolean contains(Object o);

    /**
     * @return le premier element de la liste.
     */
    E getFirst();

    /**
     * @return le dernier element de la liste.
     */
    E getLast();

    /**
     * @return l'element a la position specifiee.
     */
    E get(int index);

    /**
     * @throws UnsupportedOperationException Si le type concret
     * (l'implementation) de liste ne supporte pas cette operation.
     * 
     * @return le prochain element de la premiere occurrence de l'element
     * specifie.Si l'element specifie n'existe pas dans la liste, renvoie null.
     */
    E getNext(Object o);

    /**
     * @throws UnsupportedOperationException Si le type concret
     * (l'implementation) de liste ne supporte pas cette operation.
     *
     * @return le prochain element de la position specifiee.
     * Si la position speciee n'est pas valide, renvoie null.
     */
    E getNext(int index);

    /**
     * @throws UnsupportedOperationException Si le type concret
     * (l'implementation) de liste ne supporte pas cette operation.
     *
     * @return l'element precedent de la premiere occurrence de l'element
     * specifie.
     * Si l'element specifie n'existe pas dans la liste, renvoie null.
     */
    E getPrevious(Object o);

    /**
     * @throws UnsupportedOperationException Si le type concret
     * (l'implementation) de liste ne supporte pas cette operation.
     * 
     * @return l'element precedent de la position specifiee.
     * Si la position speciee n'est pas valide, renvoie null.
     */
    E getPrevious(int index);

    /**
     * @return la position de la premiere occurrence de l'element specifiee,
     * -1 si l'elementne fait pas partie de la liste.
     */
    int indexOf(Object o);

    /**
     * @return vrai si la liste ne contient aucun element.
     */
    boolean isEmpty();

    /**
     * Suppression d'un element de la liste.
     * @return vrai si la suppression a reussi.
     */
    boolean remove(Object o);

    /**
     * Suppression d'un element de la liste, a la position specifiee.
     * @return l'element si la position speciee est valide, null sinon.
     */
    E remove(int index);

    /**
     * Remplace l'element a la position speciee avec l'element specifie.
     * @return l'element remplace si l'indice est valide, null sinon.
     */
    E set(int index, E e);

    /**
     * @return le nombre d'elements dans la liste.
     */
    int size();

    /** @return la sous-liste comprise entre la position fromIndex inclue
     * et la position toIndex exclue
     */
    List<E> subList(int fromIndex, int toIndex);
}
